Animation
@keyframes 使用,因可定義多影格,所以適用較細微的動畫,Transform
Transition
animation 需搭配關鍵影格 @keyframes 使用。@keyframes 內部結構有兩種寫法:
from 與 to :只能定義頭語尾的影格變化。% :可以定義更多階段的影格變化。/*方式一:使用 @keyframes 定義,後面customname為自訂名稱,搭配 form to 頭尾的撰寫方式 */
@keyframes customname {
  /* 定義每個階段的影格變化  */
  from {
    /* 定義元素在該影格所套用的樣式 */
    ..
  }
  to {
    ..
  }
}
/*方式二:使用 @keyframes 定義,後面customname為自訂名稱,搭配%的撰寫方式 */
@keyframes customname {
  /* 定義每個階段的影格變化  */
  0% {
    /* 定義元素在該影格所套用的樣式 */
    ..
  }
  50% {
    ..
  }
	100% {
    ..
  }
}
這邊只列出一些常用的屬性
animation-name → 要執行的 animation 名稱。animation-duration → 執行過程秒數。animation-play-state → 播放狀態,預設是 running。
pause 搭配 :hover 。animation-timing-function → 動畫的加速速率。animation-delay → 延遲多少時間發動 animation。animation-iteration-count → 動畫要重複播放幾次。
infinite 為一直持續跑animation-fill-mode → 動畫未播放或動畫完成時,要停在哪個影格 ( 呈現的樣子 )。
none 預設值,動畫執行前或之後不會對元素產生任何樣式。forward 停留在最後一個影格位置( 結束時的狀態 )。backwards 留在第一個影格位置 ( 開始時的狀態 )。both 擁有 forward 與 backwards 兩者功能,依據開始或結束決定呈現的狀態。animation-direction → 是否要循環交替反向播放動畫。
normal 預設值,動畫正常播放reverse 動畫反向播放alternate 動畫在奇數時正向播放,偶數值反向播放。alternate-reverse 動畫在奇數時反向播放,偶數值正向播放。@keyframes,並自訂名稱
animation 載入影格
animation 需對應一個 @keyframes 自訂名 ( animation-name:@keyframes 自訂名; )。註 :如果不想要使用 animation-fill-mode:both; ,可於 @keyfarmes 中的開始與結束數值寫一樣並搭配 animation-iteration-count : infinite;,就會很順的重複跑。 Codepen 範例
from 與 to 讓物件移至右方再回來原點% 讓物件繞一圈正方形transition-duration : 動畫播放的時間。transition-timing-function:動畫執行過程的速度變化。transition-delay:延遲多少時間再發動動畫。transition-property:要更精確地掌控,可定義哪些 CSS 屬性有轉場的動畫效果
all : 預設,所有 CSS 都要轉場。none : 沒有任何 CSS 要轉場。property:屬性值可以是要轉場的 CSS 屬性名稱,以逗號區隔,屬性名稱例如 width、height。ease : 緩慢開始 → 中間變快 → 慢慢結束。linear:從開始到結束的速度一致。ease-in:緩慢開始。ease-out:緩慢結束。ease-in-out:緩慢開始和緩慢的結束。steps(int,start|end):逐格動畫,沒有過度效果,而是一幀一幀的變化,所以指定格數越多動畫看起來會越滑順。
int 為指定間格數。start|end 可選,若選 start 表示開始值不動。cubic-bezier(n, n, n, n):為二次貝茲曲線,利用兩個控制點決定一個曲線,可搭配 cubic-bezier.com 來使用。
n 值可填 0 ~ 1 之間的數字。詳細動畫效果可參考此篇文章 CSS transition 各種速率
transition-property: width; ,明確指定只有寬度要轉場效果,可見滑鼠滑入時高度是沒有轉場效果的。translate 移動:
translate(X軸, Y軸) | translateX() | translateY() | translateZ() | translate3d()
translateX()、 translateY() 可縮寫為 translate(X軸, Y軸) 。scale 縮放:
scaleX() | scaleY() | scaleZ() | scale3d()。rotate 旋轉:
rotateX() | rotateY() | rotateZ() | rotate3d()。skew 傾斜:
skew(X軸, Y軸)。以 opacity、transform、display、visibility 屬性為例。
opacity
transform
visibility
display
如果要做動畫效果會建議使用會佔據空間的屬性,這樣當某元素執行動畫效果時,不會影響其他元素的位置變得大家都在動,使用者體驗會比較好。